n=int(input())
rec=[list(map(int,input().split())) for i in range(n)]
a=(min([rec[i][0] for i in range(n)]),min([rec[i][1] for i in range(n)]))
c=(max([rec[i][2] for i in range(n)]),max([rec[i][3] for i in range(n)]))
s=sum([(rec[i][2]-rec[i][0])*(rec[i][3]-rec[i][1]) for i in range(n)])
print('YES') if s==(c[1]-a[1])*(c[0]-a[0])and(c[0]-a[0]==c[1]-a[1]) else print('NO')
#include<iostream>
using namespace std;
int maxx,maxy,sum;
int main()
{
int n,x1,y1,x2,y2,i,minx=31405,miny=31405;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>x1>>y1>>x2>>y2;
sum+=(x2-x1)*(y2-y1);
minx=min(minx,x1);
miny=min(miny,y1);
maxx=max(maxx,x2);
maxy=max(maxy,y2);
}
if(maxx-minx==maxy-miny&&(maxx-minx)*(maxy-miny)==sum)
cout<<"YES";
else cout<<"NO";
return 0;
}
//不重叠,所以直接比较面积就可以
406. Queue Reconstruction by Height | 380. Insert Delete GetRandom O(1) |
332. Reconstruct Itinerary | 368. Largest Divisible Subset |
377. Combination Sum IV | 322. Coin Change |
307. Range Sum Query - Mutable | 287. Find the Duplicate Number |
279. Perfect Squares | 275. H-Index II |
274. H-Index | 260. Single Number III |
240. Search a 2D Matrix II | 238. Product of Array Except Self |
229. Majority Element II | 222. Count Complete Tree Nodes |
215. Kth Largest Element in an Array | 198. House Robber |
153. Find Minimum in Rotated Sorted Array | 150. Evaluate Reverse Polish Notation |
144. Binary Tree Preorder Traversal | 137. Single Number II |
130. Surrounded Regions | 129. Sum Root to Leaf Numbers |
120. Triangle | 102. Binary Tree Level Order Traversal |
96. Unique Binary Search Trees | 75. Sort Colors |
74. Search a 2D Matrix | 71. Simplify Path |